
from rest_framework import serializers
from users.models import User

import re

# 用户序列化器
class UserModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = [
            'id',
            'username',
            'mobile',
            'email',

            'password' # 只参与反序列化校验
        ]

        extra_kwargs = {
            'password': {'write_only': True, 'min_length': 8, 'max_length': 20},
            'username': {'min_length': 1, 'max_length': 20}
        }

    def validate(self, attrs):
        mobile = attrs.get('mobile')
        if not re.match(r'^1[3-9]\d{9}$', mobile):
            raise serializers.ValidationError('手机号格式有误！')
        return attrs

    def create(self, validated_data):
        # TODO：由于序列化器create函数内部调用模型类的create方法新建用户，没有加密密码
        # TODO：所以此处重写使用create_user实现对象新建密码加密
        validated_data['is_staff'] = True # 需求：后台管理站点新建的用户都是管理员
        user = User.objects.create_user(**validated_data)
        # User.objects.create_superuser() --> is_staff=True 和 is_superuser=True
        return user